﻿var datetool = function() {

	/***
	 * 获得当前时间
	 */
	this.getCurrentDate = function() {
		return new Date();
	};

	this.Todate = function(num) { //Fri Oct 31 18:00:00 UTC+0800 2008
		num = num + "";
		var date = "";
		var month = new Array();
		month["Jan"] = 1;
		month["Feb"] = 2;
		month["Mar"] = 3;
		month["Apr"] = 4;
		month["May"] = 5;
		month["Jan"] = 6;
		month["Jul"] = 7;
		month["Aug"] = 8;
		month["Sep"] = 9;
		month["Oct"] = 10;
		month["Nov"] = 11;
		month["Dec"] = 12;
		var week = new Array();
		week["Mon"] = "一";
		week["Tue"] = "二";
		week["Wed"] = "三";
		week["Thu"] = "四";
		week["Fri"] = "五";
		week["Sat"] = "六";
		week["Sun"] = "日";

		str = num.split(" ");
		date = str[3] + "-";
		var count = strlen(month[str[1]]);
		var m = month[str[1]];
		if(count = 1) {
			m = "0" + month[str[1]];
		}
		date = date + m + "-" + str[2];
		return date;
	}

	function strlen(str) {
		var len = 0;
		for(var i = 0; i < str.length; i++) {
			var c = str.charCodeAt(i);
			//单字节加1 
			if((c >= 0x1 && c <= 0x007e)(0xff60 <= c && c <= 0xff9f)) {
				len++;
			} else {
				len += 2;
			}
		}
		return len;
	}

	//获得某月的开始日期　　
	this.getMonthStartDate = function(paraYear, paraMonth) {
		var monthStartDate = new Date(paraYear, paraMonth, 1);
		return formatDate(monthStartDate);
	}
	//获得某月的结束日期　　
	this.getMonthEndDate = function(paraYear, paraMonth) {
		var monthEndDate = new Date(paraYear, paraMonth, getMonthDays(paraYear, paraMonth));
		return formatDate(monthEndDate);
	}

	this.getMonthDays = function(paraYear, paraMonth) {
		var monthStartDate = new Date(paraYear, paraMonth, 1);
		var monthEndDate = new Date(paraYear, paraMonth + 1, 1);
		var days = (monthEndDate - monthStartDate) / (1000 * 60 * 60 * 24);
		return days;
	}

	/***
	 * 获得本周起止时间
	 */
	this.getCurrentWeek = function() {
		//起止日期数组  
		var startStop = new Array();
		//获取当前时间  
		var currentDate = this.getCurrentDate();
		//返回date是一周中的某一天  
		var week = currentDate.getDay();
		//返回date是一个月中的某一天  
		var month = currentDate.getDate();

		//一天的毫秒数  
		var millisecond = 1000 * 60 * 60 * 24;
		//减去的天数  
		var minusDay = week != 0 ? week - 1 : 6;
		//alert(minusDay);  
		//本周 周一  
		var monday = new Date(currentDate.getTime() - (minusDay * millisecond));
		//本周 周日  
		var sunday = new Date(monday.getTime() + (6 * millisecond));
		//添加本周时间  
		startStop.push(monday); //本周起始时间  
		//添加本周最后一天时间  
		startStop.push(sunday); //本周终止时间  
		//返回  
		return startStop;
	};

	/***
	 * 获得本月的起止时间
	 */
	this.getCurrentMonth = function() {
		//起止日期数组  
		var startStop = new Array();
		//获取当前时间  
		var currentDate = this.getCurrentDate();
		//获得当前月份0-11  
		var currentMonth = currentDate.getMonth();
		//获得当前年份4位年  
		var currentYear = currentDate.getFullYear();
		//求出本月第一天  
		var firstDay = new Date(currentYear, currentMonth, 1);

		//当为12月的时候年份需要加1  
		//月份需要更新为0 也就是下一年的第一个月  
		if(currentMonth == 11) {
			currentYear++;
			currentMonth = 0; //就为  
		} else {
			//否则只是月份增加,以便求的下一月的第一天  
			currentMonth++;
		}

		//一天的毫秒数  
		var millisecond = 1000 * 60 * 60 * 24;
		//下月的第一天  
		var nextMonthDayOne = new Date(currentYear, currentMonth, 1);
		//求出上月的最后一天  
		var lastDay = new Date(nextMonthDayOne.getTime() - millisecond);

		//添加至数组中返回  
		startStop.push(firstDay);
		startStop.push(lastDay);
		//返回  
		return startStop;
	};

	/**
	 * 得到本季度开始的月份
	 * @param month 需要计算的月份
	 ***/
	this.getQuarterSeasonStartMonth = function(month) {
		var quarterMonthStart = 0;
		var spring = 0; //春  
		var summer = 3; //夏  
		var fall = 6; //秋  
		var winter = 9; //冬  
		//月份从0-11  
		if(month < 3) {
			return spring;
		}

		if(month < 6) {
			return summer;
		}

		if(month < 9) {
			return fall;
		}

		return winter;
	};

	/**
	 * 获得该月的天数
	 * @param year年份
	 * @param month月份
	 * */
	this.getMonthDays = function(year, month) {
		//本月第一天 1-31  
		var relativeDate = new Date(year, month, 1);
		//获得当前月份0-11  
		var relativeMonth = relativeDate.getMonth();
		//获得当前年份4位年  
		var relativeYear = relativeDate.getFullYear();

		//当为12月的时候年份需要加1  
		//月份需要更新为0 也就是下一年的第一个月  
		if(relativeMonth == 11) {
			relativeYear++;
			relativeMonth = 0;
		} else {
			//否则只是月份增加,以便求的下一月的第一天  
			relativeMonth++;
		}
		//一天的毫秒数  
		var millisecond = 1000 * 60 * 60 * 24;
		//下月的第一天  
		var nextMonthDayOne = new Date(relativeYear, relativeMonth, 1);
		//返回得到上月的最后一天,也就是本月总天数  
		return new Date(nextMonthDayOne.getTime() - millisecond).getDate();
	};

	/**
	 * 获得本季度的起止日期
	 */
	this.getCurrentSeason = function() {
		//起止日期数组  
		var startStop = new Array();
		//获取当前时间  
		var currentDate = this.getCurrentDate();
		//获得当前月份0-11  
		var currentMonth = currentDate.getMonth();
		//获得当前年份4位年  
		var currentYear = currentDate.getFullYear();
		//获得本季度开始月份  
		var quarterSeasonStartMonth = this.getQuarterSeasonStartMonth(currentMonth);
		//获得本季度结束月份  
		var quarterSeasonEndMonth = quarterSeasonStartMonth + 2;

		//获得本季度开始的日期  
		var quarterSeasonStartDate = new Date(currentYear, quarterSeasonStartMonth, 1);
		//获得本季度结束的日期  
		var quarterSeasonEndDate = new Date(currentYear, quarterSeasonEndMonth, this.getMonthDays(currentYear, quarterSeasonEndMonth));
		//加入数组返回  
		startStop.push(quarterSeasonStartDate);
		startStop.push(quarterSeasonEndDate);
		//返回  
		return startStop;
	};

	/***
	 * 得到本年的起止日期
	 * 
	 */
	this.getCurrentYear = function() {
		//起止日期数组  
		var startStop = new Array();
		//获取当前时间  
		var currentDate = this.getCurrentDate();
		//获得当前年份4位年  
		var currentYear = currentDate.getFullYear();

		//本年第一天  
		var currentYearFirstDate = new Date(currentYear, 0, 1);
		//本年最后一天  
		var currentYearLastDate = new Date(currentYear, 11, 31);
		//添加至数组  
		startStop.push(currentYearFirstDate);
		startStop.push(currentYearLastDate);
		//返回  
		return startStop;
	};

	/**
	 * 返回上一个月的第一天Date类型
	 * @param year 年
	 * @param month 月
	 **/
	this.getPriorMonthFirstDay = function(year, month) {
		//年份为0代表,是本年的第一月,所以不能减  
		if(month == 0) {
			month = 11; //月份为上年的最后月份  
			year--; //年份减1  
			return new Date(year, month, 1);
		}
		//否则,只减去月份  
		month--;
		return new Date(year, month, 1);;
	};

	/**
	 * 获得上一月的起止日期
	 * ***/
	this.getPreviousMonth = function() {
		//起止日期数组  
		var startStop = new Array();
		//获取当前时间  
		var currentDate = this.getCurrentDate();
		//获得当前月份0-11  
		var currentMonth = currentDate.getMonth();
		//获得当前年份4位年  
		var currentYear = currentDate.getFullYear();
		//获得上一个月的第一天  
		var priorMonthFirstDay = this.getPriorMonthFirstDay(currentYear, currentMonth);
		//获得上一月的最后一天  
		var priorMonthLastDay = new Date(priorMonthFirstDay.getFullYear(), priorMonthFirstDay.getMonth(), this.getMonthDays(priorMonthFirstDay.getFullYear(), priorMonthFirstDay.getMonth()));
		//添加至数组  
		startStop.push(priorMonthFirstDay);
		startStop.push(priorMonthLastDay);
		//返回  
		return startStop;
	};

	/**
	 * 获得上一周的起止日期
	 * **/
	this.getPreviousWeek = function() {
		//起止日期数组  
		var startStop = new Array();
		//获取当前时间  
		var currentDate = this.getCurrentDate();
		//返回date是一周中的某一天  
		var week = currentDate.getDay();
		//返回date是一个月中的某一天  
		var month = currentDate.getDate();
		//一天的毫秒数  
		var millisecond = 1000 * 60 * 60 * 24;
		//减去的天数  
		var minusDay = week != 0 ? week - 1 : 6;
		//获得当前周的第一天  
		var currentWeekDayOne = new Date(currentDate.getTime() - (millisecond * minusDay));
		//上周最后一天即本周开始的前一天  
		var priorWeekLastDay = new Date(currentWeekDayOne.getTime() - millisecond);
		//上周的第一天  
		var priorWeekFirstDay = new Date(priorWeekLastDay.getTime() - (millisecond * 6));

		//添加至数组  
		startStop.push(priorWeekFirstDay);
		startStop.push(priorWeekLastDay);

		return startStop;
	};

	/**
	 * 得到上季度的起始日期
	 * year 这个年应该是运算后得到的当前本季度的年份
	 * month 这个应该是运算后得到的当前季度的开始月份
	 * */
	this.getPriorSeasonFirstDay = function(year, month) {
		var quarterMonthStart = 0;
		var spring = 0; //春  
		var summer = 3; //夏  
		var fall = 6; //秋  
		var winter = 9; //冬  
		//月份从0-11  
		switch(month) { //季度的其实月份  
			case spring:
				//如果是第一季度则应该到去年的冬季  
				year--;
				month = winter;
				break;
			case summer:
				month = spring;
				break;
			case fall:
				month = summer;
				break;
			case winter:
				month = fall;
				break;

		};

		return new Date(year, month, 1);
	};

	/**
	 * 得到上季度的起止日期
	 * **/
	this.getPreviousSeason = function() {
		//起止日期数组  
		var startStop = new Array();
		//获取当前时间  
		var currentDate = this.getCurrentDate();
		//获得当前月份0-11  
		var currentMonth = currentDate.getMonth();
		//获得当前年份4位年  
		var currentYear = currentDate.getFullYear();
		//上季度的第一天  
		var priorSeasonFirstDay = this.getPriorSeasonFirstDay(currentYear, currentMonth);
		//上季度的最后一天  
		var priorSeasonLastDay = new Date(priorSeasonFirstDay.getFullYear(), priorSeasonFirstDay.getMonth() + 2, this.getMonthDays(priorSeasonFirstDay.getFullYear(), priorSeasonFirstDay.getMonth() + 2));
		//添加至数组  
		startStop.push(priorSeasonFirstDay);
		startStop.push(priorSeasonLastDay);
		return startStop;
	};
	//往后往前推时间
	this.getNowFormatDate = function(time) {  
		var date = new Date(new Date().getTime() - time);  
		var seperator1 = "-";  
		var year = date.getFullYear();  
		var month = date.getMonth() + 1;  
		var strDate = date.getDate();  
		if(month >= 1 && month <= 9) {    
			month = "0" + month;  
		}  
		if(strDate >= 0 && strDate <= 9) {    
			strDate = "0" + strDate;  
		}  
		var currentdate = year + seperator1 + month + seperator1 + strDate;  
		return currentdate;
	}

	/**
	 * 得到去年的起止日期
	 * **/
	this.getPreviousYear = function() {
		//起止日期数组  
		var startStop = new Array();
		//获取当前时间  
		var currentDate = this.getCurrentDate();
		//获得当前年份4位年  
		var currentYear = currentDate.getFullYear();
		currentYear--;
		var priorYearFirstDay = new Date(currentYear, 0, 1);
		var priorYearLastDay = new Date(currentYear, 11, 1);
		//添加至数组  
		startStop.push(priorYearFirstDay);
		startStop.push(priorYearLastDay);
		return startStop;
	};

};